The sizes and capabilities of computing systems vary from systems that fit on a desktop and have a few microprocessors to large computing systems that fill large rooms and have specialized electrical and cooling requirements. Such large systems may have as many as 20,000 computing nodes or more, with each computing node having up to 40 or more central processing units (CPU's) cooperatively executing computing jobs. Computing nodes are computing entities with various resources that may be used to execute computing jobs.
As computing systems continue to grow in size and complexity, scheduling computing jobs within those computing systems becomes increasingly important, in order to efficiently use the available resources in the system.
Traditionally, scheduling within a computing system includes examining computing jobs in the order the jobs arrive to determine whether the proper resources are available to execute a specific computing job immediately. If sufficient resources are not available to execute the computing job immediately, the computing job is placed in a waiting queue until the required, previously unavailable resources become available. Once the required resources become available, the computing job is removed from the waiting queue and executed on a computing node having the required resources.